1. Technological Field
This invention relates to embedded code, such as microcode, and more particularly relates to updating a code image on a communication adapter without a need to perform host recovery.
2. Background Technology
Users continue to require high availability from computer systems and computer subsystems. Web servers, database servers, application servers, and the like are expected to be available around the clock. Maintenance and upgrades to these systems should minimize time the system is offline, if at all.
The computer system or subsystem includes a basic set of instructions for performing operations. This basic set of instructions comprises a fundamental set of computer instructions, similar to an operating system, which define how the computer system or subsystem functions. Generally, this basic set of instructions is referred to as the code image, microcode, embedded code, or the like. The code image typically includes assembly code instructions or raw machine language binary code instructions that are optimized for a particular microprocessor and/or set of hardware.
Typically, a Basic Input Output System (BIOS) program loads the code image into volatile RAM when a computer system is powered on. Alternatively, the code image is stored in non-volatile RAM or other forms of memory. Execution of the instructions in the code image begins once the computer system properly initializes.
Periodically, the code image must be updated to provide improved functionality, resolve programming bugs, and/or support new hardware. It is desirable that an old code image be updated with a new code image with minimal interruption of the computer system concurrently executing the old code image. The code image update should require minimal time, comprise operations of minimal complexity, and provide minimal delay in resuming regular operations once the update completes.
Conventionally, code image updates are performed by a section of the old code image known as the bootstrap code. The bootstrap code is executed in response to an interrupt that signals a code image update operation. The copy operation partially or wholly overwrites the old code image with the new code image. This process is known as a code overlay.
FIG. 1 depicts a conventional code overlay method. The standard technique for performing a conventional code overlay and reinitializing a communication adapter includes taking the communication adapter offline and thereby quiescing the I/O. The communication adapter then turns off light, which is the optical transmission signal used on a fiber optic communication channel. With the communication adapter offline, the new code image is loaded on the communication adapter, replacing the old code image. The code overlay is conventionally performed by a bootstrap code, for instance, stored in the old code or flash image. After loading the new code image, the communication adapter then turns on light.
To reinitialize the communication adapter, the new code image then may initialize any code structures and puts the host bus adapter back online. Unfortunately, the time that the communication adapter is offline during a conventional code overlay is significant enough that I/O requests from a remote host will be rejected. In order to continue with the I/O, the remote host must relogin and establish new paths and connections with the communication adapter.
Another more recent code update method employs a code overlay operation that decreases the amount of time that the communication adapter is offline. In this method, many of the related code overlay operations are performed prior to taking the communication adapter offline. This technology may be referred to herein as “fastload” to distinguish it from other conventional technologies. However, the time required to perform the fastload overlay and to resume light after taking the adapter offline still may necessitate that the host relogin and establish new paths and connections with the communication adapter.
The host in which the host bus adapter is located may retry to send the I/O request during the time that the host bus adapter is offline. If the host is unable to send the I/O during a retry period, the command may timeout for a period, which may vary depending on the specific hardware or application configuration. Upon timing out, the remote host may assume that the communication adapter is not functional, label the port “bad,” and remove the path from the path group. The remote host likely has to perform a recovery sequence, as described above, in order to reestablish the path.
As described above, a typical code overlay process requires that the affected hardware device be offline for a relatively substantial amount of time. In the case of a communication adapter, such as a host adapter or host bus adapter, the process may take several minutes to complete, during which time the host may determine that the adapter has failed and switch over to an alternate path. In the case where no alternate path exists, the entire system may be halted during this lengthy process. Whether the system is halted during the timeout and failover period, or whether the system is entirely offline during the code overlay process, disruption of I/O paths and system availability to the user can have costly affects.
From the foregoing discussion, it should be apparent that a need exists for an apparatus, system, and method for updating a code image on a communication adapter without necessitating host relogin and reestablishment of connection paths. Beneficially, such an apparatus, system, and method would overcome the present challenges associated with conventional code overlay technologies.